#ifndef INITIALSOL_
#define INITIALSOL_

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <map>
#include <cmath>

#include "DGMatrix.h"
#include "DGIntMatrix.h"
#include "mesh.h"
#include "functionSpace.h"
#include "saveGmsh.h"
#include "ANN/ANN.h"

using namespace std;

enum initType {Smooth,ThreeBodyRotation,Burger,KPP,SineWave};
//------------------------------------------------------------------------------
class InitialSolution{

private:
 
  Mesh*         mesh;
  FsContainer*  fs;
  SolContainer  Uinit;
  
  string initSolName;
  int    initTypeSol;
  
  void   computeInitialSolution();

public:
  
  InitialSolution(Mesh*,FsContainer*,SaveOutputGmsh*,ClassParameter&);
  ~InitialSolution(){};

  double analyticalSol              (double,double);  
  
  double SmoothSolution             (double,double);
  double ThreeBodyRotationSolution  (double,double);
  double BurgerSolution             (double,double);
  double KPPSolution                (double,double);
  
  SolContainer* getInitialSol()     {return &Uinit;}
  
};
#endif
